package com.nutricia.core.service;

import com.nutricia.core.model.domain.CmsSystemMenuDO;
import com.nutricia.core.model.domain.SystemUserDO;

import java.util.List;

/**
 * 系统用户service
 *
 * @author: huangsheng
 * @date: 2017/10/19
 */
public interface SystemUserService {


    /**
     * 登入
     *
     * @param userLoginName 登入名
     * @param password      密码
     * @return 登入用户ID
     */
    String login(String userLoginName, String password, String loginIp);

    /**
     * 创建用户
     *
     * @author: huangsheng
     * @date: 2017/10/25 下午1:51
     */
    String createUser(SystemUserDO systemUserDO);

    /**
     * 批量创建用户角色数据
     *
     * @author: huangsheng
     * @date: 2017/10/25 下午2:21
     */
    void batchCreateUserRole(List<String> roleIds, String userId);

    /**
     * 获取用户所拥有的角色id集合
     *
     * @param userId 用户id
     * @author: huangsheng
     * @date: 2017/10/25 下午3:49
     */
    List<String> getUserRoleIds(String userId);

    /**
     * 通过id获取用户信息
     *
     * @author: huangsheng
     * @date: 2017/10/25 下午3:50
     */
    SystemUserDO getUserDOByUserId(String userId);

    /**
     * 更新用户
     *
     * @param systemUserDO
     * @return userId
     */
    String updateUser(List<String> roleIds, SystemUserDO systemUserDO);

    /**
     * 修改用户状态，禁用or启用
     *
     * @param userState 用户状态 00启用， 01禁用
     * @param userId    用户id
     * @param modifyId  修改人id
     */
    void updateUserState(String userState, String userId, String modifyId);

    /**
     * 根据用户信息查询菜单数据
     *
     * @author: huangsheng
     * @date: 2017/10/26 下午4:57
     */
    List<CmsSystemMenuDO> getUserMenuList(String userLoginName, String userId);

    /**
     * 获取用户权限
     *
     * @param userId 用户ID
     * @return
     */
    List<String> getUserPermissionCodes(String userId);

    /**
     * 通过权限code 集合获取用户权限的用户
     *
     * @param permissionCodes 权限code 集合
     * @return
     */
    List<SystemUserDO> getUerByPermissionCodes(List<String> permissionCodes);

    /**
     * 通过userId获得userName
     * @param userId
     * @return
     */
    String getUserNameById(String userId);
}
